import axios from "axios";
import { Message } from "element-ui";
import store from "@/store"; // store====this.$store
import router from "@/router"; // router===this.$router
import i18n from "@/i18n";
// 统一设置基地址
const request = axios.create({
  // 接口基地址：开发环境   生产环境
  // 环境变量：
  // 代码会识别是什么环境
  // 开发环境：
  // 1、项目根目录创建 .env.development文件
  // 2、设置开发环境变量值VUE_APP_开头(***)="变量值"
  // 访问：process.env.VUE_APP_URL
  // 生产环境
  // 1、项目根目录创建 .env.production
  // 2、设置开发环境变量值VUE_APP_开头(***)="变量值"
  // 访问：process.env.VUE_APP_URL
  baseURL: process.env.VUE_APP_URL,
  // baseURL: 'http://119.91.150.211:3000/api'
});
// 添加请求拦截器
request.interceptors.request.use(
  function (config) {
    // config.url += "?lang=en";
    if (store.state.user.token) {
      config.headers.Authorization = `Bearer ${store.state.user.token}`;
      config.headers.lang = i18n.locale;
    }
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
request.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // response.data.message = "请求成功";
    if (response.data.success) {
      return response.data;
    } else {
      Message.error(response.data.message);
      //抛出一个js错误，错误一旦产生，后续代码不会执行
      return Promise.reject(new Error(response.data.message));
    }
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    //token失效处理
    if (error.response && error.response.status === 401) {
      // 提示错误信息
      Message.error(error.response.data.message);
      // 删除token,删除用户信息
      store.commit("user/logout");
      // 跳转到登录页
      router.push("/login");
    }
    return Promise.reject(error);
  }
);

export default request;
